package com.jmyd.coupon.server.domain.vo;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.jmyd.coupon.server.domain.po.SceneCoupon;
import com.jmyd.coupon.server.enums.SceneCouponExclusiveStatusEnum;
import com.jmyd.coupon.server.enums.SceneCouponTypeEnum;
import com.jmyd.coupon.server.enums.SceneCouponUsePlatformEnum;
import lombok.Data;
import org.springframework.beans.BeanUtils;
import org.springframework.util.CollectionUtils;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;

/**
 * 优惠券模版对象
 *
 * @author samphin
 * @since 2021-7-13 18:08:52
 */
@Data
public class SceneCouponVo implements Serializable {


    private static final long serialVersionUID = -3526768156763402531L;

    /**
     * 优惠券模版ID
     */
    private Long id;

    /**
     * 优惠券名称
     */
    private String name;

    /**
     * 优惠券面值（如果满减券则为满金额，条件值）
     */
    private BigDecimal amount;

    /**
     * 优惠金额面值（针对满减券，折扣值）
     */
    private BigDecimal discountAmount;

    /**
     * 优惠券类型:1：折扣券，2：满减券 3：免单券 4：立减券 5：随机券
     */
    private Integer type;

    /**
     * 优惠券类型名称
     */
    private String typeDic;

    /**
     * 互斥状态：true=互斥;false=不互斥
     */
    private Boolean exclusiveStatus;

    /**
     * 互斥状态：互斥;不互斥
     */
    private String exclusiveStatusDic;

    /**
     * 使用平台：PC、APP、H5、APPLET
     */
    private String usePlatform;

    /**
     * 有效期起始时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date validStartTime;

    /**
     * 有效期结束时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date validEndTime;

    public SceneCouponVo buildVo(SceneCoupon po) {
        SceneCouponVo vo = new SceneCouponVo();
        BeanUtils.copyProperties(po, vo);
        vo.setId(po.getId());
        vo.setTypeDic(SceneCouponTypeEnum.getByCode(po.getType()));
        vo.setUsePlatform(SceneCouponUsePlatformEnum.getByCode(po.getUsePlatform()));
        vo.setExclusiveStatusDic(SceneCouponExclusiveStatusEnum.getByCode(po.getExclusiveStatus()));
        return vo;
    }

    /**
     * 将poList->voList
     *
     * @param poList
     */
    public List<SceneCouponVo> buildVoList(List<SceneCoupon> poList) {
        if (CollectionUtils.isEmpty(poList)) {
            return new ArrayList<>(1);
        }
        return poList.stream().map(this::buildVo).collect(Collectors.toList());
    }
}
